load("@npm//@bazel/typescript:index.bzl", "ts_library")
load("//ts:prettier.bzl", "prettier_test")
load("//ts:eslint.bzl", "eslint_test")
load("//ts/svelte:svelte.bzl", "compile_svelte", "svelte_check")
load("//ts:esbuild.bzl", "esbuild")
load("//ts:compile_sass.bzl", "compile_sass")
load("//ts:jest.bzl", "jest_test")

compile_sass(
    srcs = ["ChangeNotetype-base.scss"],
    group = "base_css",
    visibility = ["//visibility:public"],
    deps = [
        "//ts/sass:base_lib",
        "//ts/sass:scrollbar_lib",
        "//ts/sass/bootstrap",
    ],
)

svelte_files = glob(["*.svelte"])

svelte_names = [f.replace(".svelte", "") for f in svelte_files]

compile_svelte(
    name = "svelte",
    srcs = svelte_files,
    deps = [
        "//ts/components",
        "//ts/sveltelib",
        "@npm//@types/bootstrap",
    ],
)

ts_library(
    name = "index",
    srcs = ["index.ts"],
    deps = [
        "ChangeNotetypePage",
        "lib",
        "//ts/components",
        "//ts/lib",
        "@npm//svelte2tsx",
    ],
)

ts_library(
    name = "lib",
    srcs = [
        "lib.ts",
    ],
    module_name = "ChangeNotetype",
    deps = [
        "//ts/components",
        "//ts/lib",
        "//ts/lib:backend_proto",
        "//ts/sveltelib",
        "@npm//lodash-es",
        "@npm//svelte",
    ],
)

esbuild(
    name = "ChangeNotetype",
    srcs = [
        "//ts:protobuf-shim.js",
    ],
    args = [
        "--global-name=anki",
        "--inject:$(location //ts:protobuf-shim.js)",
        "--resolve-extensions=.mjs,.js",
        "--log-level=warning",
        "--loader:.svg=text",
    ],
    entry_point = "index.ts",
    external = [
        "protobufjs/light",
    ],
    output_css = "ChangeNotetype.css",
    visibility = ["//visibility:public"],
    deps = [
        "index",
        "//ts/lib",
        "//ts/lib:backend_proto",
        "@npm//bootstrap",
        ":base_css",
        "//ts/sveltelib",
        "@npm//marked",
        "//ts/components",
        "//ts/components:svelte_components",
    ] + svelte_names,
)

exports_files(["ChangeNotetype.html"])

# Tests
################

prettier_test(
    name = "format_check",
    srcs = glob([
        "*.ts",
        "*.svelte",
    ]),
)

eslint_test(
    name = "eslint",
    srcs = glob([
        "*.ts",
    ]),
)

svelte_check(
    name = "svelte_check",
    srcs = glob([
        "*.ts",
        "*.svelte",
    ]) + [
        "//ts/sass:button_mixins_lib",
        "//ts/sass/bootstrap",
        "@npm//@types/bootstrap",
        "@npm//@types/lodash-es",
        "@npm//@types/marked",
        "//ts/components",
    ],
)

jest_test(
    protobuf = True,
    deps = [
        ":lib",
        "//ts/lib:backend_proto",
        "@npm//protobufjs",
        "@npm//svelte",
    ],
)
